﻿using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
using Atendex.Dominio;
using Atendex.Dominio.Interfaces;

namespace Atendex.Dominio.ActiveRecord
{
    [ActiveRecord("tipo_solicitacao"), JoinedBase]
    [Serializable]
    public abstract class TipoSolicitacaoAR : ActiveRecordBase, ITipoSolicitacao
    {
        protected TipoSolicitacaoAR()
        {
        }

        internal TipoSolicitacaoAR(string nome, string descricao)
        {
            Nome = nome;
            Descricao = descricao;
            SolicitantesPermitidos = new List<ITipoSolicitante>();
            Ativo = true;
        }

        [PrimaryKey]
        public virtual int Id { get; set; }

        [Property]
        public string Nome { get; set; }

        [Property]
        public string Descricao { get; set; }

        public virtual IArea AreaNegocio { get; set; }

        [HasAndBelongsToMany(typeof (TipoSolicitanteAR), Table = "tipo_solicitacao_tipo_solicitante",
            ColumnKey = "tipo_solicitante_id", ColumnRef = "tipo_solicitacao_id")]
        public IList<ITipoSolicitante> SolicitantesPermitidos { get; set; }

        [HasAndBelongsToMany(typeof (OrdemServicoAR), Table = "ordem_tipo", ColumnKey = "tipo_id",
            ColumnRef = "ordem_id", Inverse = true)]
        public IList<IOrdemServico> OrdensServico { get; set; }

        [Property]
        public bool Ativo { get; set; }

        public override string ToString()
        {
            return Nome;
        }
    }
}